/***********************************************************************
    filename:   ImageryComponent.h
    created:    Mon Jun 13 2005
    author:     Paul D Turner <paul@cegui.org.uk>
*************************************************************************/

#ifndef _ImageryComponent_h_
#define _ImageryComponent_h_

#include "renderers/ComponentBase.h"

/*!
\brief
    Class that encapsulates information for a single image component.
*/
class ImageryComponent : public ComponentBase
{
public:
    /*!
    \brief
        Constructor
    */
    ImageryComponent();

    /*!
    \brief
        Return the Image object that will be drawn by this ImageryComponent.

    \return
        Image object.
    */
    const Image* getImage() const;

    /*!
    \brief
        Set the Image that will be drawn by this ImageryComponent.

    \param
        Pointer to the Image object to be drawn by this ImageryComponent.

    \return
        Nothing.
    */
    void setImage(const Image* image);

    /*!
    \brief
        Set the Image that will be drawn by this ImageryComponent.

	\param image
        String holding the name of the Image to be rendered.

    \return
        Nothing.
    */
    void setImage(const String& image);

    /*!
    \brief
        Return the current vertical formatting setting for this ImageryComponent.

    \return
        One of the VerticalFormatting enumerated values.
    */
    VerticalFormatting getVerticalFormatting() const;

    /*!
    \brief
        Set the vertical formatting setting for this ImageryComponent.

    \param fmt
        One of the VerticalFormatting enumerated values.

    \return
        Nothing.
    */
    void setVerticalFormatting(VerticalFormatting fmt);

    /*!
    \brief
        Return the current horizontal formatting setting for this ImageryComponent.

    \return
        One of the HorizontalFormatting enumerated values.
    */
    HorizontalFormatting getHorizontalFormatting() const;

    /*!
    \brief
        Set the horizontal formatting setting for this ImageryComponent.

    \param fmt
        One of the HorizontalFormatting enumerated values.

    \return
        Nothing.
    */
    void setHorizontalFormatting(HorizontalFormatting fmt);

    /*!
    \brief
        Return whether this ImageryComponent fetches it's image via a property on the target window.

    \return
        - true if the image comes via a Propery.
        - false if the image is defined explicitly.
    */
    bool isImageFetchedFromProperty() const;

    /*!
    \brief
        Return the name of the property that will be used to determine the image for this ImageryComponent.

    \return
        String object holding the name of a Propery.
    */
    const String& getImagePropertySource() const;

    /*!
    \brief
        Set the name of the property that will be used to determine the image for this ImageryComponent.

    \param property
        String object holding the name of a Propery.  The property should access a imageset & image specification.

    \return
        Nothing.
    */
    void setImagePropertySource(const String& property);

protected:
    // implemets abstract from base
    void render_impl(Window& srcWindow, hgeRect& destRect, const ColourRect* modColours, const hgeRect* clipper, bool clipToDisplay) const;

    const Image*         d_image;           //!< Image to be drawn by this image component.
    VerticalFormatting   d_vertFormatting;  //!< Vertical formatting to be applied when rendering the image component.
    HorizontalFormatting d_horzFormatting;  //!< Horizontal formatting to be applied when rendering the image component.
    String  d_imagePropertyName;            //!< Name of the property to access to obtain the image to be used.
};

#endif  // end of guard _ImageryComponent_h_
